package com.myacg.core.utils;

import com.myacg.core.entity.Point;

public class MoveUtils {
	

/**
 * 求两点坐标之间的距离
 * @param startP
 * @param endP
 * @return
 */
public static double getRangle(Point startP,Point endP){
	double x = endP.x-startP.x;
	double y = endP.y-startP.y;
    double S=Math.hypot(x,y) ;
    return S;
}
/**
 * 获取水平方向与斜线的夹角（弧度）  从正右下起顺时针
 * @param startP
 * @param endP
 * @return
 */
public static double getAngle(Point startP,Point endP){
	double x = endP.x-startP.x;//x增量
	double y = endP.y-startP.y;
	double angle= Math.atan(y/x);
	if(x<0){ 
		angle=Math.PI+angle;
	}else if(y<0){ 
		angle=2*Math.PI+angle;
	}
	//System.out.println(Math.round(Math.toDegrees(angle)));
    return  angle;
}
	
	
//s=𝑣0×𝑡+ 1 2×𝑎×𝑡2 
/**
 * 计算已知初速度和加速度在某一时刻的增量
 * @param v0
 * @param a
 * @param t
 * @return
 */
public static double getNextS(double v0,double a,double t){
	return v0*t+0.5*a*t*t;
}
/**
 * 根据三角函数计算 有误差
 * 已知起点和终点的坐标，根据一定速度。计算下一点的坐标
 * @param speed
 * @param startP
 * @param endP
 * @return
 */
public static Point getNextPointByEnd(double speed, Point startP,Point endP){
	//算出偏移量
	double ax = endP.x-startP.x;
	double ay = endP.y-startP.y;
    double aS=Math.hypot(ax,ay) ;
    //如果距离大于当前速度
    if(aS>speed){
    	 //比例
	    double k=speed/aS;
	    startP.x+=k*ax;
	    startP.y+=k*ay;
    }
    return startP;
}
 
/**
 * 根据中心点 半径 和弧度 计算当前点
 * @param R	  半径/长度
 * @param fAngle 角度/方向
 * @param centerP 核心点/起点
 * @return
 */
public static Point getNextOvalPoint(double R,double fAngle,Point centerP){
	int x=(int) (R*Math.cos(fAngle) +centerP.x);;  
	int y=(int) (R*Math.sin(fAngle) +centerP.y);  
    return new Point(x, y);   
}
	 
}
